package org.xx.armory.config;

import org.xx.armory.commons.NameObjectBag;

import java.util.Properties;

/**
 * 使用 {@link Properties} 保存配置内容的配置项。
 */
public class PropertiesSection
        extends NameObjectBag {
    /**
     * 构造配置项。
     */
    public PropertiesSection() {
    }

    /**
     * 设置属性的值。
     * <p>如果参数{@code value}是{@code null}或者空字符串，那么移除该属性。</p>
     *
     * @param name
     *         属性名。
     * @param value
     *         属性值。
     * @throws IllegalArgumentException
     *         如果参数{@code name}是{@code null}或者空字符串。
     */
    public final void setProperty(
            String name,
            String value
    ) {
        super.putString(name, value);
    }

    /**
     * 获取属性的值。
     *
     * @param name
     *         属性名。
     * @return 属性的值，如果属性不存在则返回空字符串。
     */
    public final String getProperty(
            String name
    ) {
        return super.getString(name);
    }

    /**
     * 获取{@link Properties}形式的所有配置项值。
     *
     * @return {@link Properties}形式的所有配置项值。
     */
    public final Properties properties() {
        final Properties properties = new Properties();

        super.forEach(item -> properties.setProperty(item.getName(), item.getObject().toString()));

        return properties;
    }
}

